/**
  ******************************************************************************
  * @file    operation_protocol_data_def.h
  * @brief   运营平台协议数据定义
  ******************************************************************************
  */

#ifndef __OPERATION_PROTOCOL_DATA_DEF_H
#define __OPERATION_PROTOCOL_DATA_DEF_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "operation_util.h"
#include "operation_types.h"

/**平台数据定义 */
#define OPS_CHARGINGPILE_TYPE       0x01       /* 充电桩类型 */
#define OPS_MAGIC                   0x68       /* 协议特定标识码 */
#define OPS_VERSION                 0x10       /* 协议版本号（v1.6） */
#define OPS_ENCRYPT_FLAG            0x00       /* 加密标志 */

/** 数据长度定义 */
#define OPS_MAX_PORT_NUM            (2)        /* 充电接口数量/计量用电能表数量 */
#define OPS_MAX_CARD_NUMBRE_LEN     (8)        /* 卡号最大长度 */
#define OPS_MAX_PERIOD_LEN          (48)       /* 时段数量 */
#define OPS_MAX_CARD_NUM            (15)       /* 下发卡最大数量*/
#define OPS_MAX_CLEAR_CARD_NUM      (24)       /* 清除卡最大数量*/
#define OPS_MAX_QUERY_CARD_NUM      (26)       /* 查询卡最大数量*/

/************************************ 运营平台枚举定义 *************************************/

/* 充电枪枪号（编号） */
typedef enum {
    OPSGUNNOA = 0x01,
    OPSGUNNOB,
} ops_charge_gunnos_enum;

/** 运营平台事件类型 */
typedef enum {
    OPS_CMD_EVENT_SIGN_IN       = 0x01,   /* 登录签到（接入认证） */
    OPS_CMD_EVENT_HEARTBEAT     = 0x03,   /* 心跳 */
    OPS_CMD_EVENT_CHECK_FEE     = 0x05,   /* 充电模型验证请求*/
    OPS_CMD_EVENT_FEE_STRATEGY  = 0x09,   /* 计费策略 */
    OPS_CMD_EVENT_CARD_AUTH     = 0x31,   /* 充电桩主动申请充电 */
    OPS_CMD_EVENT_BILL          = 0x3B,   /* 账单 */
    OPS_CMD_EVENT_UPDATE_RES    = 0x93,   /* 远程更新应答*/
    OPS_CMD_EVENT_HANDSHAKE     = 0x15,   /* 充电握手*/
    OPS_CMD_EVENT_SET_VALUE     = 0x17,   /* 参数配置*/
    OPS_CMD_EVENT_CHARGE_COMPLETE = 0x19, /* 充电结束*/
    OPS_CMD_EVENT_ERROR         = 0x1B,   /* 充电错误报文*/
    OPS_CMD_EVENT_CHARGE_ABORT  = 0x1D,   /* 充电BMS中止*/
    OPS_CMD_EVENT_CHARGE_STOP   = 0x21,   /* 充电机中止*/
    OPS_CMD_EVENT_CHARGE_OUTPUT = 0x23,   /* 充电过程BMS需求与电机输出*/
    OPS_CMD_EVENT_CHARGE_PROCESS_STATUS = 0x25, /* 充电过程BMS*/
} ops_cmd_event_enum;

/** 运营平台属性类型 */
typedef enum {
    OPS_CMD_PROPERTY_CHARG_DATA = 0x13,   /* 充电枪实时数据 */
} ops_cmd_property_enum;

/************************************** 开始字节对齐 ***************************************/

#pragma pack(1)

typedef union {
    uint8_t      tm[7];
    struct {
        uint16_t msec;
        uint8_t  min   : 6;
        uint8_t  res1  : 1;
        uint8_t  iv    : 1; /* <0> = 有效；<1> = 无效 */
        uint8_t  hour  : 5;
        uint8_t  res2  : 2;
        uint8_t  su    : 1; /* <0> = 标准时间；<1> = 夏时令 */
        uint8_t  mday  : 5; /* Day of Month */
        uint8_t  wday  : 3; /* Day of Week */
        uint8_t  month : 4;
        uint8_t  res3  : 4;
        uint8_t  year  : 7;
        uint8_t  res4  : 1;
    } cp56time2a_tm;
} cp56time2a_t;

typedef struct {
    uint8_t  magin;          /* 1. 标识 */
    uint8_t  length;         /* 2. 长度 */
    uint16_t seq;            /* 3. 序列号 */
    uint8_t  encrypt;        /* 4. 加密标志 */
    uint8_t  opcode;         /* 5. 类型 */
} ops_head_t;

/* 充电桩登陆签到（接入认证）请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];     /* 桩编码 */
    uint8_t    pile_type;          /* 桩类型 */
    uint8_t    gun_count;          /* 枪数量 */
    uint8_t    protocol_version;   /* 通信协议版本号 */
    uint8_t    soft_version[8];    /* 程序版本 */
    uint8_t    net_type;           /* 网络类型 */
    uint8_t    sim_no[10];         /* SIM卡号 */
    uint8_t    mnc;                /* 网络运营商 */
    uint16_t   crc;                /* 校验 */
} ops_event_sign_in_t;

/* 云服务器登陆签到（接入认证）应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];     /* 桩编码 */
    uint8_t    result;             /* 结果 */
    uint16_t   crc;                /* 校验 */
} ops_passive_service_sign_in_t;

/* 充电桩心跳请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];     /* 桩编码 */
    uint8_t    gun_number;         /* 枪号 */
    uint8_t    gun_state;          /* 枪状态 */
    uint16_t   crc;                /* 校验 */
} ops_event_heartbeat_t;

/* 云服务器心跳应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];     /* 桩编码 */
    uint8_t    gun_number;         /* 枪号 */
    uint8_t    gun_state;          /* 枪状态 */
    uint16_t   crc;                /* 校验 */
} ops_passive_service_heartbeat_t;

/* 充电桩计费策略请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];     /* 桩编码 */
    uint16_t   crc;                /* 校验 */
} ops_event_fee_strategy_t;

/* 云服务计费策略应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                 /* 桩编码 */
    uint16_t   fee_model_number;               /* 计费模型编号 */
    uint32_t   sharp_elec_fee;                 /* 尖电费 */
    uint32_t   sharp_service_fee;              /* 尖服务费 */
    uint32_t   peak_elec_fee;                  /* 峰电费 */
    uint32_t   peak_service_fee;               /* 峰服务费 */
    uint32_t   flat_elec_fee;                  /* 平电费 */
    uint32_t   flat_service_fee;               /* 平服务费 */
    uint32_t   valley_elec_fee;                /* 谷电费 */
    uint32_t   valley_service_fee;             /* 谷服务费 */
    uint8_t    loss_calculation_scale;         /* 计损比例 */
    uint8_t    period[OPS_MAX_PERIOD_LEN];     /* 时段费率号 */
    uint16_t   crc;                            /* 校验 */
} ops_passive_service_fee_strategy_t;

/* 充电桩账单请求报文 */
typedef struct {
    ops_head_t   head;
    uint8_t      serial_number[16];              /* 交易流水号 */
    uint8_t      pill_number[7];                 /* 桩编码 */
    uint8_t      gun_number;                     /* 充电枪号 */
    cp56time2a_t start_time;                     /* 充电开始时间 */
    cp56time2a_t stop_time;                      /* 充电结束时间 */
    uint32_t     sharp_unit_fee;                 /* 尖单价（尖电费价格 + 尖服务费价格） */
    uint32_t     sharp_total_elect;              /* 尖电量 */
    uint32_t     sharp_loss_calculation_elect;   /* 计损尖电量 */
    uint32_t     sharp_total_fee;                /* 尖金额 */
    uint32_t     peak_unit_fee;                  /* 峰单价（峰电费价格 + 峰服务费价格） */
    uint32_t     peak_total_elect;               /* 峰电量 */
    uint32_t     peak_loss_calculation_elect;    /* 计损峰电量 */
    uint32_t     peak_total_fee;                 /* 峰金额 */
    uint32_t     flat_unit_fee;                  /* 平单价（平电费价格 + 平服务费价格） */
    uint32_t     flat_total_elect;               /* 平电量 */
    uint32_t     flat_loss_calculation_elect;    /* 计损平电量 */
    uint32_t     flat_total_fee;                 /* 平金额 */
    uint32_t     valley_unit_fee;                /* 谷单价（谷电费价格 + 谷服务费价格） */
    uint32_t     valley_total_elect;             /* 谷电量 */
    uint32_t     valley_loss_calculation_elect;  /* 计损谷电量 */
    uint32_t     valley_total_fee;               /* 谷金额 */
    uint8_t      total_meter_start[5];           /* 电表总起值 */
    uint8_t      total_meter_stop[5];            /* 电表总止值 */
    uint32_t     total_elect;                    /* 总电量 */
    uint32_t     total_loss_calculation_elect;   /* 计损总电量 */
    uint32_t     charging_fee;                   /* 消费金额 */
    uint8_t      vin[17];                        /* 车辆VIN码 */
    uint8_t      transaction_type;               /* 交易标识 */
    cp56time2a_t transaction_date;               /* 交易时间日期 */
    uint8_t      stop_reason;                    /* 停止原因 */
    uint8_t      physical_card_number[OPS_MAX_CARD_NUMBRE_LEN];   /* 物理卡号 */
    uint16_t     crc;                            /* 校验 */
} ops_event_bill_t;

/* 云服务器账单应答报文 */
typedef struct {
    ops_head_t   head;
    uint8_t      serial_number[16];            /* 交易流水号 */
    uint8_t      handle_result;                /* 处理结果 */
    uint16_t     crc;                          /* 校验 */
} ops_passive_service_bill_t;

/* 充电桩实时数据请求报文 */
typedef struct {
    ops_head_t   head;
    uint8_t      serial_number[16];         /* 交易流水号 */
    uint8_t      pill_number[7];            /* 桩编码 */
    uint8_t      gun_number;                /* 充电枪号 */
    uint8_t      status;                    /* 状态（桩） */
    uint8_t      regun;                     /* 枪是否归位 */
    uint8_t      connect_gun;               /* 枪是否连接 */
    uint16_t     output_voltage;            /* 输出电压 */
    uint16_t     output_current;            /* 输出电流 */
    uint8_t      line_temp;                 /* 抢线温度 */
    uint8_t      line_number[8];            /* 抢线编码 */
    uint8_t      soc;                       /* SOC */
    uint8_t      battery_max_temp;          /* 电池组最高温度 */
    uint16_t     charging_time;             /* 累计充电时间 */
    uint16_t     remaining_charging_time;   /* 剩余充电时间 */
    uint32_t     charging_elect;            /* 充电度数 */
    uint32_t     loss_calculation_elect;    /* 计损充电度数 */
    uint32_t     charging_fee;              /* 充电费用 */
    uint16_t     fault;                     /* 硬件故障 */
    uint16_t     crc;                       /* 校验 */
} ops_property_charge_data_t;

/* 云服务器时间同步请求报文 */
typedef struct {
    ops_head_t   head;
    uint8_t      pill_number[7];            /* 桩编码 */
    cp56time2a_t time;                      /* 时间 */
    uint16_t     crc;                       /* 校验 */
} ops_active_service_time_syn_t;

/* 充电桩时间同步应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t      pill_number[7];            /* 桩编码 */
    cp56time2a_t time;                      /* 时间 */
    uint16_t     crc;                       /* 校验 */
} ops_active_service_feedback_time_syn_t;

/* 云服务器重启充电桩请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];              /* 桩编码 */
    uint8_t    exe_control;                 /* 执行控制 */
    uint16_t   crc;                         /* 校验 */
} ops_active_service_reboot_t;

/* 充电桩重启应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];             /* 桩编码 */
    uint8_t    handle_result;              /* 处理结果 */
    uint16_t   crc;                        /* 校验 */
} ops_active_service_feedback_reboot_t;

/* 云服务器启动升级请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];             /* 桩编码 */
    uint8_t    pile_type;                  /* 桩类型 */
    uint16_t   pile_power;                 /* 桩功率 */
    uint8_t    update_addr[16];            /* 升级地址 */
    uint16_t   update_port;                /* 升级端口 */
    uint8_t    user[16];                   /* 用户名 */
    uint8_t    password[16];               /* 密码 */
    uint8_t    path[32];                   /* 路径 */
    uint8_t    exe_control;                /* 执行控制 */
    uint8_t    timeout;                    /* 超时时间 */
    uint16_t   crc;                        /* 校验 */
} ops_active_service_start_update_t;

/* 充电桩启动升级应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    update_status;             /* 升级状态 */
    uint16_t   crc;                       /* 校验 */
} ops_active_service_feedback_start_update_t;

/* APP启动充电请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint8_t    logical_card_number[8];    /* 逻辑卡号 */
    uint8_t    physical_card_number[OPS_MAX_CARD_NUMBRE_LEN];   /* 物理卡号 */
    uint32_t   account_balance;           /* 账户余额 */
    uint16_t   crc;                       /* 校验 */
} ops_active_service_start_charging_app_t;

/* APP启动充电应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint8_t    handle_result;             /* 处理结果 */
    uint8_t    failed_reason;             /* 失败原因 */
    uint16_t   crc;                       /* 校验 */
} ops_active_service_feedback_start_charging_app_t;

/* APP停止充电请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint16_t   crc;                       /* 校验 */
} ops_active_service_stop_charging_app_t;

/* APP停止充电应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint8_t    handle_result;             /* 处理结果 */
    uint8_t    failed_reason;             /* 失败原因 */
    uint16_t   crc;                       /* 校验 */
} ops_active_service_feedback_stop_charging_app_t;

/* 充电桩主动申请充电报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint8_t    start_mode;                /* 启动方式 */
    uint8_t    whether_need_password;     /* 是否需要密码 */
    uint8_t    physical_card_number[OPS_MAX_CARD_NUMBRE_LEN];   /* 账号或物理卡号 */
    uint8_t    password[16];              /* 密码 */
    uint8_t    vin[17];                   /* 车辆VIN码 */
    uint16_t   crc;                       /* 校验 */
} ops_event_card_authorize_t;


/*BMS 各阶段报文 */
typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */

    uint8_t    BRM_communication_version[3];            /* BMS版本 */
    uint8_t    BRM_batery_type;
    uint16_t   BRM_battery_power_should;
    uint16_t   BRM_battery_voltage_should;
    uint8_t    BRM_Manufacturer[4];
    uint8_t    BRM_Battery_no[4];
    uint8_t    BRM_battery_production_year;
    uint8_t    BRM_battery_production_month;
    uint8_t    BRM_battery_production_data;
    uint16_t   BRM_battery_charge_times1;
    uint8_t    BRM_battery_charge_times2;
    uint8_t    BRM_battery_production_on;
    uint8_t    BRM_empty_reserv;
    uint8_t    BRM_VIN[17];
    uint8_t    BRM_BMS_software_version[8];
    uint16_t   crc;                       /* 校验 */
} ops_event_charge_handshake_t;

typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */

//    Maximum allowable voltage of battery

    uint16_t   BCP_max_voltage_battery_allow;
    int16_t    BCP_max_current_allow;
    uint16_t   BCP_eneger_total;
    uint16_t   BCP_voltage_hightest_allow;
    uint8_t    BCP_tem_highest_allow;
    uint16_t   BCP_battery_staus_soc;
    uint16_t   BCP_battery_voltage_now;

    uint16_t   charge_max_voltage_output;
    uint16_t   charge_min_voltage_output;
    uint16_t   charge_max_current_output;
    uint16_t   charge_min_current_output;

    uint16_t   crc;                       /* 校验 */
} ops_event_set_value_t;


typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    uint8_t    BSD_abort_soc;
    uint16_t   BSD_battery_min_voltage;
    uint16_t   BSD_battery_max_voltage;
    uint8_t    BSD_battery_min_tem;
    uint8_t    BSD_battery_max_tem;

    uint16_t   charger_charging_time;
    uint16_t   charger_output_energy;
    uint32_t   charger_number;

    uint16_t   crc;                       /* 校验 */
} ops_event_charge_complete_t;


typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    uint32_t   BEM_receive_00_timeout : 2;
    uint32_t   BEM_receive_AA_timeout : 2;
    uint32_t                           : 4;

    uint32_t   BEM_charger_tim_timeout : 2;
    uint32_t   BEM_charger_ready_timeout : 2;
    uint32_t                           : 4;

    uint32_t   BEM_charger_status_timeout : 2;
    uint32_t   BEM_charger_abort_timeout : 2;
    uint32_t                           : 4;

    uint32_t   BEM_charger_stati_timeout : 2;
    uint32_t                           : 6;
    /* */
    uint32_t   CEM_bms_vin_timeout : 2;
    uint32_t                           : 6;

    uint32_t   CEM_bms_battery_timeout : 2;
    uint32_t   CEM_bms_ready_timeout : 2;
    uint32_t                           : 4;

    uint32_t   CEM_battery_status_timeout : 2;
    uint32_t   CEM_battery_need_timeout : 2;
    uint32_t   CEM_bms_abort_timeout : 2;
    uint32_t                          : 2;

    uint32_t   CEM_bms_stati_timeout : 2;
    uint32_t                           : 6;


    uint16_t   crc;                       /* 校验 */
} ops_event_error_t;


typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    uint8_t    BST_bms_stop;
    uint16_t   BST_bms_fault;
    uint16_t   BST_bms_error;
    uint16_t   crc;                       /* 校验 */
} ops_event_charge_abort_t;


typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    uint8_t    CST_charger_stop;
    uint16_t   CST_charger_fault;
    uint16_t   CST_charger_error;

    uint16_t   crc;                       /* 校验 */
} ops_event_charge_stop_t;


typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    int16_t    BCL_Voltage_need;
    int16_t    BCL_Current_need;
    int8_t     BCL_charge_staus;
    uint16_t   BCS_Voltage_MeterValue;
    int16_t    BCS_Current_MeterValue;
    uint16_t   BCS_highest_battery_V  : 12;
    uint16_t   BCS_highest_battery_N  : 4;
    uint8_t    BCS_SOC_NOW;
    uint16_t   BCS_Remain_time;
    uint16_t   charge_voltage_output;
    uint16_t   charge_current_output;
    uint16_t   had_charge_output_time;

    uint16_t   crc;                       /* 校验 */
} ops_event_charge_output_t;

typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */


    uint8_t    BSM_highest_voltage_battery_no  ;
    uint8_t    BSM_highest_tem_battery_tem;
    uint8_t    BSM_highest_tem_battery_no;
    uint8_t    BSM_min_tem_battery_tem;
    uint8_t    BSM_min_tem_battery_no;
    uint8_t    BSM_battery_voltage_staus  : 2;
    uint8_t    BSM_battery_soc_staus      : 2;
    uint8_t    BSM_battery_current_staus  : 2;
    uint8_t    BSM_battery_tem_staus      : 2;

    uint8_t    BSM_battery_protect_staus  : 2;
    uint8_t    BSM_battery_connect_staus  : 2;
    uint8_t    BSM_battery_charge_staus   : 2;
    uint8_t                               : 2;

    uint16_t   crc;                       /* 校验 */
} ops_event_charge_process_status_t;

typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint16_t   fee_mode_no;                /* fee 号 */
    uint16_t   crc;                       /* 校验 */
} ops_event_fee_mode_check_t;

typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];            /* 桩编码 */
    uint16_t   fee_mode_no;                /* fee 号 */
    uint8_t    result;
    uint16_t   crc;                       /* 校验 */
} ops_passive_service_fee_mode_check_t;

/* 充电桩主动申请充电应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    serial_number[16];         /* 交易流水号 */
    uint8_t    pill_number[7];            /* 桩编码 */
    uint8_t    gun_number;                /* 充电枪号 */
    uint8_t    logical_card_number[8];    /* 逻辑卡号 */
    uint32_t   account_balance;           /* 账户余额 */
    uint8_t    authentication_flag;       /* 鉴权标志 */
    uint8_t    failed_reason;             /* 失败原因 */
    uint16_t   crc;                       /* 校验 */
} ops_passive_service_card_authorize_t;

typedef struct {
    uint8_t    logical_card_number[OPS_MAX_CARD_NUMBRE_LEN];   /* 逻辑卡号 */
    uint8_t    physical_card_number[OPS_MAX_CARD_NUMBRE_LEN];  /* 物理卡号 */
} card_info_t;

/* 云服务器离线卡数据同步请求报文 */
typedef struct {
    ops_head_t  head;
    uint8_t     pill_number[7];                 /* 桩编码 */
    uint8_t     add_card_amount;                /* 下发卡个数 */
    card_info_t card_info[OPS_MAX_CARD_NUM];    /* 逻辑卡号+物理卡号*/
    uint16_t    crc;                            /* 校验 */
} ops_active_service_card_syn_t;

/* 充电桩离线卡数据同步应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                  /* 桩编码 */
    uint8_t    store_result;                    /* 保存结果 */
    uint8_t    failed_reason;                   /* 失败原因 */
    uint16_t   crc;                             /* 校验 */
} ops_active_service_feedback_card_syn_t;

/* 云服务器离线卡数据清除请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                                      /* 桩编码 */
    uint8_t    clear_card_amount;                                   /* 清除卡个数 */
    uint8_t    physical_card_number[OPS_MAX_CLEAR_CARD_NUM][OPS_MAX_CARD_NUMBRE_LEN]; /* 物理卡号 */
    uint16_t   crc;                                                 /* 校验 */
} ops_active_service_card_clear_t;

typedef struct {
    uint8_t    physical_card_number[OPS_MAX_CARD_NUMBRE_LEN];      /* 物理卡号 */
    uint8_t    clear_flag;                                         /* 清除标志 */
    uint8_t    failed_reason;                                      /* 失败原因 */
} clear_card_info_t;

/* 充电桩离线卡数据清除应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                                      /* 桩编码 */
    clear_card_info_t clear_card_info[OPS_MAX_CLEAR_CARD_NUM];      /* 清除卡信息回复*/
    uint16_t   crc;                                                 /* 校验 */
} ops_active_service_feedback_card_clear_t;

/* 云服务器离线卡数据查询请求报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                                      /* 桩编码 */
    uint8_t    query_card_amount;                                   /* 查询卡个数 */
    uint8_t    physical_card_number[OPS_MAX_QUERY_CARD_NUM][OPS_MAX_CARD_NUMBRE_LEN]; /* 物理卡号 */
    uint16_t   crc;                                                 /* 校验 */
} ops_active_service_card_query_t;

/* 充电桩离线卡数据查询应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                                      /* 桩编码 */
    uint8_t    physical_card_number[OPS_MAX_QUERY_CARD_NUM][OPS_MAX_CARD_NUMBRE_LEN]; /* 物理卡号 */
    uint8_t    query_reason;                                        /* 查询结果 */
    uint16_t   crc;                                                 /* 校验 */
} ops_active_service_feedback_card_query_t;

/* 云服务器计费策略请求报文 */
/* 与 ops_passive_service_fee_strategy_t 共用一个数据结构 */

/* 云服务器计费策略应答报文 */
typedef struct {
    ops_head_t head;
    uint8_t    pill_number[7];                 /* 桩编码 */
    uint8_t    result;                         /* 设置结果 */
    uint16_t   crc;                            /* 校验 */
} ops_active_service_feedback_fee_strategy_t;

#pragma pack() /* #pragma pack(1) */

/************************************** 结束字节对齐 ***************************************/

#ifdef __cplusplus
}
#endif

#endif /* __OPERATION_PROTOCOL_DATA_DEF_H */
